// 给你一个整数数组 arr 和一个整数 k 。现需要从数组中恰好移除 k 个元素，请找出移除后数组中不同整数的最少数目。
// 输入：：arr = [4,3,1,1,3,3,2], k = 3
// 输出：2
// 解释：先移除 4、2 ，然后再移除两个 1 中的任意 1 个或者三个 3 中的任意 1 个，最后剩下 1 和 3 两种整数。
/**
* @name
* @param  arr { Array[number] }
*         k { number}
*  @return  { number}
*/

let arr = [4, 3, 1, 1, 3, 3, 2, 2, 5, 5, 6], k = 3;
function quchu(arr, k) {
    let obj = {}
    arr.map((item) => {
        if (obj[item]) {
            obj[item]++
        } else {
            obj[item] = 1
        }
    })
    let temp = Object.values(obj);
    temp.sort((a, b) => b - a);
    for (let j = 0; j < k; j++) {
        temp[temp.length - 1]--;
        if (temp[temp.length - 1] == 0) {
            temp.pop();
        }
    }
    return temp.length;
}
console.log(quchu(arr, k))




console.log('1');

setTimeout(function() {
    console.log('2');
    process.nextTick(function() {
        console.log('3');
    })
    new Promise(function(resolve) {
        console.log('4');
        resolve();
    }).then(function() {
        console.log('5')
    })
})
process.nextTick(function() {
    console.log('6');
})
new Promise(function(resolve) {
    console.log('7');
    resolve();
}).then(function() {
    console.log('8')
})

setTimeout(function() {
    console.log('9');
    process.nextTick(function() {
        console.log('10');
    })
    new Promise(function(resolve) {
        console.log('11');
        resolve();
    }).then(function() {
        console.log('12')
    })
})
// 1，7，6，8，2，4，3，5，9，11，10，12。